package generics;

import java.util.ArrayList;
import java.util.List;

public class GenericsInCollections {
    public static void main(String[] args) {
        // 1. 不使用泛型（存在安全隐患）
        List rawList = new ArrayList();
        rawList.add("字符串");
        rawList.add(123); // 可以添加任意类型

        // 取出元素时需要强制转型，可能出错
        try {
            String str = (String) rawList.get(1); // 运行时抛出ClassCastException
        } catch (ClassCastException e) {
            System.out.println("类型转换错误：" + e.getMessage());
        }

        // 2. 使用泛型（类型安全）
        List<String> stringList = new ArrayList<>(); // 菱形语法，Java 7+
        stringList.add("Hello");
        stringList.add("World");
        // stringList.add(123); // 编译错误，不允许添加非String类型

        // 取出元素时无需转型，类型明确
        String first = stringList.get(0);
        System.out.println("第一个元素：" + first);

        // 3. 泛型集合的遍历（类型安全）
        for (String s : stringList) {
            System.out.println(s); // 直接使用String类型，无需转型
        }

        // 4. 其他集合的泛型使用
        java.util.Map<String, Integer> scoreMap = new java.util.HashMap<>();
        scoreMap.put("张三", 90);
        scoreMap.put("李四", 85);
        // scoreMap.put("王五", "优秀"); // 编译错误，值必须是Integer类型
    }
}
